package service

import (
	"goadmin/logs"
	"goadmin/models"
	"goadmin/utils"
	"gorm.io/gorm"
)

type UserService struct {
	DB *gorm.DB
}

func NewUserService(db *gorm.DB) *UserService {
	return &UserService{DB: db}
}

type updateUserData struct {
	Mobile string `gorm:"column:mobile" json:"mobile"`
	Openid string `gorm:"column:openid" json:"openid"`
	RoleId uint   `gorm:"column:role_id" json:"role_id"`
}

func GetUser(id int) (u models.User, err error) {
	err = models.DB.Model(&models.User{}).First(&u, id).Error
	return u, err
}

// 根据手机号获取用户信息
func GetUserInfoByMobile(mobile string) (u []models.User, err error) {
	err = models.DB.Where("mobile = ?", mobile).Find(&u).Error
	return u, err
}

// 创建用户根据手机号
func CreateUserInfoByMobile(updateData updateUserData) (rowsLength int64, err error) {
	result := models.DB.Model(&models.User{}).Create(updateData)
	return result.RowsAffected, result.Error
}

// GetUserList 获取用户分页列表
func GetUserList(pageInfo utils.PageInfo, query models.UserQuery) (*utils.PageResult, error) {
	var users []models.User
	var total int64
	// 构建查询
	db := models.DB.Model(&models.User{})
	// 添加查询条件
	if query.Mobile != "" {
		keyword := "%" + query.Mobile + "%"
		db = db.Where("mobile LIKE ?", keyword)
		logs.Sugar().Info("code失败错误信息--query.Mobile", query.Mobile)
	}
	if query.RoleId > 0 {
		db = db.Where("role_id = ?", query.RoleId)
	}
	// 获取总数
	if err := db.Count(&total).Error; err != nil {
		return nil, err
	}
	// 分页查询
	offset := pageInfo.GetOffset()
	pageSize := pageInfo.GetPageSize()
	if err := db.Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&users).Error; err != nil {
		return nil, err
	}
	// 返回分页结果
	return utils.NewPageResult(users, total, pageInfo.GetPage(), pageSize), nil
}
